/*--------------------------------------------------------------------------+
|                                                                          |
| Copyright 2008-2012 Technische Universitaet Muenchen                     |
|                                                                          |
| Licensed under the Apache License, Version 2.0 (the "License");          |
| you may not use this file except in compliance with the License.         |
| You may obtain a copy of the License at                                  |
|                                                                          |
|    http://www.apache.org/licenses/LICENSE-2.0                            |
|                                                                          |
| Unless required by applicable law or agreed to in writing, software      |
| distributed under the License is distributed on an "AS IS" BASIS,        |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and      |
| limitations under the License.                                           |
+--------------------------------------------------------------------------*/

package edu.tum.cs.cadmos.core.model;

import edu.tum.cs.cadmos.commons.core.IListSet;
import edu.tum.cs.cadmos.core.machines.IMachine;

/**
 * An atomic component in a hierarchical data-flow network defines its behavior
 * by a machine that operates over a set of variables and ports.In particular,
 * an atomic component does not have any children components like an
 * {@link ICompositeComponent}.
 * <p>
 * The {@link AtomicComponent} class is a reference implementation of this
 * interface.
 * 
 * @author wolfgang.schwitzer
 * @version $Rev: 237 $
 * @version $Author: wolfgang.schwitzer $
 * @version $Date: 2011-11-26 20:54:39 +0000 (Sat, 26 Nov 2011) $
 * @ConQAT.Rating RED Hash:
 * 
 * @see AtomicComponent
 * @see ICompositeComponent
 */
public interface IAtomicComponent extends IComponent {

	/** Returns the variables that are in the scope of this atomic component. */
	IListSet<IVariable> getVariables();

	/** Returns the machine that defines the behavior of this atomic component. */
	IMachine getMachine();

}
